
/**
 * 求出arr数组中满足最大值-最小值等于k的所有子数组个数
 * @param {number[]} arr 整型数组
 * @param {number} k 比较数字
 * @returns 
 */
function getSubStringCount(arr, k) {
  if(arr.length <= 1) return 0
  let max = []
  let min = []
  let res =0
  let L = 0, R = 0
  while(L < arr.length) {
    while(R< arr.length) {
      while(max.length && max[max.length-1] <= arr[R]) {
        max.pop()
      }
      max.push(arr[R])
      while(min.length && min[min.length-1] >= arr[R]) {
        min.pop()
      }
      min.push(arr[R])
      if(arr[max[0]]-arr[min[0] > k]) {
        break
      }
      R++
    }
    res += R-L
    // 是否过期
    if(min[0] == L) min.pop()
    if(max[0] == R) max.pop()
    L++
  }
  return res
}